package lib

import (
	"GameServer/Common/data"
	"GameServer/Common/utils"
	"GameServer/Game/errors"
	"GameServer/Game/m"
)

// 兑换道具
func ExchangeProp(u *m.User, exCode string) (r []*m.Goods, err error) {
	ec := &m.ExCode{}
	err = ec.Load(exCode)
	// 获取的无效兑换码
	if err != nil || ec.APId == 0 {
		err = errors.NewErrcode(data.Errcode.ServerErr, "无效兑换码")
		return
	}

	ap := &m.AcitvPack{}
	err = ap.Load(ec.APId)
	if err != nil || ap.Goods == nil {
		err = errors.NewErrcode(data.Errcode.ServerErr, "无效兑换码")
		return
	}
	nowUnix := utils.TNow().Unix()
	// 礼包已经过期
	if nowUnix > ap.CloseTime {
		err = errors.NewErrcode(data.Errcode.ExCodeOutDate, "礼包过期")
		return
	}

	uc := &m.UserCode{}
	uc.Load(u.Uid)
	// 玩家领取了该礼包
	if _, ok := uc.ActivId[ap.Id]; ok {
		err = errors.NewErrcode(data.Errcode.ExCodeYouBeUsed, "玩家领取过该礼包")
		return
	}
	// 记录玩家领取该礼包
	uc.ActivId[ap.Id] = ap.Id
	uc.Save()

	switch ec.CType {
	case m.CodeType.Once: // 只能使用一次
		// 销毁被使用的兑换码
		ec.Delete()
	case m.CodeType.Many: // 兑换码可以被多人使用
		// 不销毁兑换码
	default:
		err = errors.NewErrcode(data.Errcode.ServerErr, "无效兑换码")
		return
	}
	r = make([]*m.Goods, 0)
	for _, item := range ap.Goods {
		r = append(r, &m.Goods{
			Tid: item.Key,
			Num: item.Value,
		})
	}
	return
}
